/**
 * Project Name:JavaBaseReview
 * Package Name:com.xuwei.base.tree
 * author:David
 * Date:2016年5月9日上午11:00:00
 * Copyright (c) 2016, xw123box@126.com All Rights Reserved.
 *
 */
package com.xuwei.base.link;

import com.xuwei.base.link.Iterator;
import com.xuwei.base.link.Node;
import com.xuwei.ext.exception.OutOfBoundaryException;

/**
 * @author David
 * @since 2016年5月9日 上午11:00:00
 * @version 
 * @since JDK 1.6
 */
public class LinkedListIterator implements Iterator {
	private LinkedList list;//链接表
	private Node current;//当前结点
	
	//构造方法
	public LinkedListIterator(LinkedList list){
		this.list = list;
		if(list.isEmpty()){//若列表为空
			current = null;//则当前元素置空
		}else{
			current = list.first();//否则从第一个元素开始
		}
	}
	
	//移动到第一个元素
	@Override
	public void first() {
		if(list.isEmpty()){//若列表为空
			current = null;//则当前元素置空
		}else{
			current = list.first();//否则从第一个元素开始
		}
	}

	//移动到下一个元素
	@Override
	public void next() throws OutOfBoundaryException{
		if(isDone()){
			throw new OutOfBoundaryException("错误：已经没有元素。");
		}
		if(current==list.last()){//当前元素后面没有更多元素
			current = null;
		}else{
			current = list.getNext(current);
		}
	}

	//检查迭代器中是否还有剩余元素
	@Override
	public boolean isDone() {
		return current==null;
	}

	//返回当前元素
	@Override
	public Object currentItem() throws OutOfBoundaryException{
		if(isDone()){
			throw new OutOfBoundaryException("错误：已经没有元素。");
		}
		return current.getData();
	}

}
